package com.yt.fragments;
import java.util.ArrayList;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.view.KeyEvent;
import android.view.LayoutInflater;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.ViewGroup;
import android.view.inputmethod.EditorInfo;
import android.view.inputmethod.InputMethodManager;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.EditText;
import android.widget.GridView;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.yt.activities.YTSDKUtils;
import com.yt.activities.adapters.SearchListAdapter;
import com.yt.common.constants.Constants;
import com.yt.common.utils.ConnectionChecker;
import com.yt.common.utils.GData;
import com.yt.common.utils.MyLog;
import com.yt.common.utils.Utils;
import com.yt.item.VideoItem;
import com.ytsdk.testapp.stp.R;
public class SearchListFragment extends Fragment {
private static final String KEY_CONTENT = "ItemListFragment:Items";
private static final String KEY_FILE_NAME = "ItemListFragment:fileName";
private final String SEARCH_URL_1 = "https://www.googleapis.com/youtube/v3/search?order=viewCount&q=";
private final String SEARCH_URL_2 = "&type=video&maxResults=20&part=snippet&fields=items(id/videoId,snippet/title,snippet/thumbnails)&key="
+ Constants.YOUTUBE_API_KEY;
private GridView mGridView;
LinearLayout progressBar;
SearchListAdapter mListAdapter;
ArrayList<VideoItem> item = new ArrayList<VideoItem>();
private static SearchListFragment thisPointer;
private int position;
private EditText mEditText;
private LinearLayout mSearchButton;
public static SearchListFragment getInstance(int position) {
// if (gridFragent == null) {
thisPointer = new SearchListFragment();
// }
Bundle args = new Bundle();
args.putInt("position", position);
thisPointer.setArguments(args);
return thisPointer;
}
@Override
public void onCreate(Bundle savedInstanceState) {
restoreData(savedInstanceState);
Bundle bundle = this.getArguments();
if (bundle != null) {
this.position = bundle.getInt("position");
}
super.onCreate(savedInstanceState);
Utils.loadFullScreenAd(getActivity());
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.layout_search_video, container,
false);
progressBar = (LinearLayout) view.findViewById(R.id.loadingPanel);
mGridView = (GridView) view.findViewById(R.id.list);
mEditText = (EditText) view.findViewById(R.id.edit_seach);
mEditText
.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId,
KeyEvent event) {
if (actionId == EditorInfo.IME_ACTION_SEARCH) {
performSearch();
return true;
}
return false;
}
});
mSearchButton = (LinearLayout) view
.findViewById(R.id.searchButtonLayout);
mSearchButton.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
performSearch();
}
});
return view;
}
private void performSearch() {
Utils.showFullScreenAd(getActivity());
String searchText = mEditText.getText().toString();
if (searchText == null || searchText.length() == 0) {
return;
}
closeKeyboard();
if (!isConnectivityPresent()) {
return;
}
Pattern pattern = Pattern.compile("\\s+");
Matcher matcher = pattern.matcher(searchText);
String decodedSearchStr = matcher.replaceAll("%20");
String searchUrl = SEARCH_URL_1 + decodedSearchStr + SEARCH_URL_2;
new GetVideoListFromYouTube().execute(searchUrl);
}
@Override
public void onActivityCreated(Bundle savedInstanceState) {
super.onActivityCreated(savedInstanceState);
}
@Override
public void onPause() {
super.onPause();
closeKeyboard();
}
private void closeKeyboard() {
if (SearchListFragment.this == null) {
return;
}
try {
InputMethodManager imm = (InputMethodManager) getActivity()
.getSystemService(getActivity().INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(mEditText.getWindowToken(), 0);
} catch (Exception e) {
// TODO: handle exception
}
}
public void onListItemClick(GridView g, View v, int position, long id) {
YTSDKUtils.getYTSDK().showCustomDialog(getActivity(), true, false);
YTSDKUtils.getYTSDK().download(getActivity(),
item.get(position).getVideoId());
}
private void restoreData(Bundle savedInstanceState) {
if ((savedInstanceState != null)
&& savedInstanceState.containsKey(KEY_CONTENT)) {
item = (ArrayList<VideoItem>) savedInstanceState.get(KEY_CONTENT);
position = savedInstanceState.getInt(KEY_FILE_NAME);
}
}
private class GetVideoListFromYouTube extends
AsyncTask<String, Void, ArrayList<VideoItem>> {
@Override
protected void onPreExecute() {
super.onPreExecute();
progressBar.setVisibility(View.VISIBLE);
mGridView.setVisibility(View.GONE);
}
@Override
protected ArrayList<VideoItem> doInBackground(String... params) {
ArrayList<VideoItem> videoList = null;
String searchUrl = params[0];
if (searchUrl != null && searchUrl.length() > 0) {
videoList = GData.getGData(searchUrl);
}
return videoList;
}
@Override
protected void onPostExecute(ArrayList<VideoItem> result) {
super.onPostExecute(result);
// Cancel the Loading Dialog
progressBar.setVisibility(View.GONE);
addVideoList(result);
}
}
private void addVideoList(ArrayList<VideoItem> videoList) {
if (videoList == null || videoList.size() == 0) {
if (!progressBar.isShown()) {
}
return;
}
// mErrorTextView.setVisibility(View.GONE);
item = videoList;
mListAdapter = new SearchListAdapter(getActivity(), item, position,
R.layout.grid_item);
if (mGridView != null) {
mGridView.setAdapter(mListAdapter);
}
mGridView.setOnItemClickListener(new OnItemClickListener() {
public void onItemClick(AdapterView parent, View view,
int position, long id) {
onListItemClick((GridView) parent, view, position, id);
}
});
// }
// This has to run only at fist time from next the on scroll down will
// run
if (!item.isEmpty()) {
mGridView.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
}
}
private boolean isConnectivityPresent() {
ConnectivityManager cm = (ConnectivityManager) getActivity()
.getSystemService(Context.CONNECTIVITY_SERVICE);
ConnectionChecker connectionChecker = new ConnectionChecker(
getActivity(), cm, getActivity());
if (MyLog.disableConnectionCheckForDebug) {
return true;
}
if (connectionChecker.isOnline()) {
return true;
} else {
showConnectivityErrorDialog();
return false;
}
}
private void showConnectivityErrorDialog() {
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
builder.setCancelable(true);
builder.setIcon(null);
builder.setTitle(null);
builder.setMessage(getActivity().getString(R.string.enablewifiMsg));
builder.setInverseBackgroundForced(true);
builder.setPositiveButton("Settings",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
Intent settingPage = new Intent(
android.provider.Settings.ACTION_SETTINGS);
getActivity().startActivityForResult(settingPage, 0);
dialog.dismiss();
}
});
builder.setNegativeButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
dialog.dismiss();
}
});
AlertDialog alert = builder.create();
alert.show();
}
}